﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;
// 原题连接：https://leetcode.cn/problems/reverse-integer/description/
/*
题目描述：
给你一个 32 位的有符号整数 x ，返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [−231,  231 − 1] ，就返回 0。

假设环境不允许存储 64 位整数（有符号或无符号）。


示例 1：

输入：x = 123
输出：321
示例 2：

输入：x = -123
输出：-321
示例 3：

输入：x = 120
输出：21
示例 4：

输入：x = 0
输出：0


提示：

-231 <= x <= 231 - 1
*/

// 开始解题：
// 方法——数学

class Solution {
public:
    int reverse(int x) {
        int ret = 0;
        while (x) {
            if (x > 0) {
                if (ret > INT_MAX / 10 || ret * 10 > INT_MAX - x % 10) {
                    return 0;
                }
            }
            if (x < 0) {
                if (ret < INT_MIN / 10 || ret * 10 < INT_MIN - x % 10) {
                    return 0;
                }
            }
            ret = ret * 10 + x % 10;
            x /= 10;
        }

        return ret;
    }
};